Computer systems can comprise input devices, output devices, one or more CPUs and storage media such as semiconductor RAM, EEPROM, disc drives, CD drives, or other storage media. An operating system provides an application environment and a file system for allocating (and deallocating) storage capacity as files are created, modified, or deleted. Specialized computer systems, such as servers and storage arrays, for example, also employ a file system for allocating storage capacity that is accessed through a network or other connection. Servers and storage arrays store files across a plurality of disc drives, depending on a desired storage format, such as a RAID level, for example. User data files are mapped to one or more areas on one or more disc drives. Mapping includes storage of mirror data or parity data. Configuration information describing the manner in which data files are mapped to one or more disc drives is contained in tables or other data structure termed metadata. As files are created, modified, or deleted, metadata is updated to reflect the allocation or deallocation of storage capacity.
Systems can be multi-threaded and multi-tasking, simultaneously executing a number of processes. Abnormal execution of one process (such as a system process or user application) can cause one or more processes to end in an incomplete manner. While operating systems strive to provide an operating environment where abnormal execution of one application does not affect other applications, conditions such as bus failures, memory errors, code errors, power failures, power surges, or other conditions can result in a system crash. Storage capacity allocation or de-allocation processes can be operating when system execution is halted by a crash, possibly resulting in erroneous allocation or de-allocation and loss of data.